home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 1998 September / Macworld (1998-09).dmg / Shareware World / Info / For Developers / Chipmunk_Basic_3.5.5 / chipmunk-basic quick-ref < prev    next >
Text File  |  1998-06-19  |  28KB  |  580 lines

  1. /*
  2.  * Quick Reference and FAQ for Chipmunk Basic - MacOS version
  3.  * chipmunk-basic-3.5.5.sit.hqx - 98Jun
  4.  *
  5.  * Chipmunk Basic is (c) Copyright 1994,1998 Ronald H. Nicholson, Jr.
  6.  * ALL RIGHTS RESERVED
  7.  *
  8.  * This program is distributed in the hope that it will be useful, but
  9.  * WITHOUT ANY WARRANTY OF ANY KIND; not even the implied warranty of
  10.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  11.  
  12. Updates to this document may be found on the WWWeb at:
  13.   http://www.nicholson.com/rhn/basic/  
  14.  
  15. ---
  16. Quick Reference for Chipmunk Basic
  17. ported to the MacOS by Ronald H. Nicholson, Jr.      rhn@nicholson.com 
  18.  
  19. Chipmunk Basic is a freeware old-fashioned Basic Interpreter, accelerated
  20. for the PowerMac, yet still compatible with old 68k Macs running System 6.
  21. Features include support for a simple sprite graphics engine, sound,
  22. MacinTalk speech, MacTCP, AppleScript, Drag&Drop and OOP programming.
  23.  
  24. Supported operators, functions and statements (reserved words):
  25.  
  26.         + - * / ^ mod  and or xor not  > < >= <= <> =
  27.         sqr() log() exp() sin() cos() tan() atn()  pi
  28.         abs() sgn() int() rnd() peek() val() asc() len()
  29.         mid$() right$() left$() str$() chr$()  lcase$() ucase$()
  30.         goto  if then else endif  gosub return
  31.         for to step next  while wend  select case
  32.         rem  let  dim erase  data read restore   field$()
  33.         input print open for output append as close# load save
  34.         random lof loc get put   
  35.         inkey$  input$ eof()  files  fgetbyte# fseek# fputbyte
  36.         run stop end exit quit cont  renum  new clear
  37.         date$ time$ timer  sound morse say  doevents inputbox
  38.         home cls gotoxy htab vtab pos()  menu
  39.         graphics sprite pset moveto lineto window scrn mouse()
  40.         varptr peek() poke fre push() pop  isarray  mat
  41.         sub call usr  bload bsave  def fn  exec
  42.         type class extends  string integer single double longint
  43.         asin acos sinh cosh tanh log10 floor true false ubound
  44.  
  45.  
  46. - The "basic.man" file is included with the distribution.  It
  47.   describes the above functions and statements in more detail.
  48.   
  49. - Line numbers are required for console input.
  50. - Line numbers are NOT required when using BBEdit with BBEdit Extensions!
  51.  
  52. - The interpreter includes an dumb old fashioned line number based
  53.   editor.  (Enter a line; delete a line; edit one line at a time).
  54. - The variable types are float doubles and strings with a maximum
  55.   length of 254 characters.  Variable names can be up to 31 characters
  56.   in length and are case insensitive.
  57. - Math is done using the built-in double precision IEEE math.
  58.   All trigonometric functions express angles in radians.
  59.  
  60. ---
  61. Some Simple Examples:
  62.  
  63.   for i=1 to 10 : print i : next i
  64.  
  65.   c$ = a$ + b$              : rem string concatenation
  66.   a$ = inkey$               : rem inkey$ is non-blocking 
  67.   
  68.   load "sieve.bas"          : rem load TEXT file as a Basic program
  69.                             : rem file names should have .bas extension
  70.   
  71.   open "filename" for output as #1 : print #1, "hello world" : close #1 
  72.   
  73.   graphics 0  : moveto 10,10 : lineto 110,80    : rem draw a line
  74.   
  75. ---
  76. Frequently Asked Questions:
  77.  
  78. Q: Where is there more documentation on learning how to program in the
  79.    BASIC language?
  80. A: The language is mostly compatible with books on programming in the
  81.    BASIC language that were published between 1978 and 1988.  Since these
  82.    are mostly out of print, your best bet is to try your local public
  83.    library.
  84.    
  85.    Also, there is a short tutorial on the Chipmunk Basic web page:
  86.         http://www.nicholson.com/rhn/basic/
  87.  
  88. Q: How do I use BBEdit (so that I don't need to use line-numbers).
  89. A: Install BBedit Lite (or BBEdit) on your system with Chipmunk Basic.
  90.    A folder named "BBEdit Extensions" should appear with BBEdit.  Copy
  91.    the bbxt named "bb2cbas" from the "chipmunk-basic-xxx" folder into
  92.    the "BBEdit Extensions" folder.  Run BBEdit; and enter a program
  93.    using BBEdit; then use the "Chipmunk Basic Load Contents" item in
  94.    the BBEdit Extension menu to send your program text to the Chipmunk
  95.    Basic interpreter. BBEdit Lite is available on Info-Mac and many
  96.    other software archives and at the Bare Bones Software(tm) web site:
  97.    <http://web.barebones.com/free/free.html>
  98.  
  99. Q: Why won't this Mumblesoft QuickBasic program run? ...
  100. A: Chipmunk Basic was never intended to be exactly compatible with any
  101.    other commercial BASIC language product.  It does include most of the
  102.    features of ANSI minimal BASIC language definition.  Many BASIC
  103.    programs that are saved as ASCII text files, and that don't use any
  104.    special features of a particular computer OS, can be easily ported
  105.    to Chipmunk Basic.
  106.    
  107. Q: Is there any way to redirect print statements to a line printer?
  108. A: No, there is no way to make this work with current MacOS printer
  109.    drivers. I recommend printing to a file, and then using SimpleText
  110.    to print the file.
  111.  
  112.    Depending on what kind of printer you have, the command
  113.          call "printText"
  114.    might send the last 66 lines of text from the console window to your
  115.    printer (US letter size only.)
  116.  
  117. Q: Why can't I load a text file using the "Open" menu?
  118. A: Chipmunk Basic requires that Basic program file names end with a
  119.    ".bas" suffix. However, if you hold down the option key, Chipmunk
  120.    Basic will try to open any TEXT file.
  121.  
  122. Q: How do I talk to the serial ports using Chipmunk Basic?
  123. A: Chipmunk Basic requires that the Communications ToolBox "Serial Tool"
  124.    be installed in the Extensions folder in your System Folder.  First
  125.    open "COM1:" for input, followed by opening "COM1:" for output.
  126.    The errorstatus$ string variable will return a string you can use
  127.    instead of "COM1:" when you don't want the CTB setup dialog box.
  128.    Try the following snippet:
  129.    
  130.     100 rem   ***  Using the CTB serial ports  ***
  131.     110 on error goto 200
  132.     120 open "COM1:" for input as #3 : altsetup$ = "COM1: "+errorstatus$
  133.     130 open "COM1:" for output as #4
  134.     150 while not mouse(0)
  135.     160   if not eof(3) then i = fgetbyte(3) : print chr$(i);
  136.     170   c$ = inkey$ : if len(c$) > 0 then print #4,c$;
  137.     180 wend
  138.     190 print " closing serial ports" : close #4 : close #3
  139.     200 print errorstatus$ : goto 190
  140.  
  141.    The command
  142.         CALL "sendbreak", n
  143.    will send a break for n ticks (60ths of a second).
  144.    
  145.    If you can't use the Communications ToolBox Serial Tool for any
  146.    reason,you can try using
  147.         open "COM3: 19200" for input as #3      ' note the COM3:
  148.    instead.  This uses the serial port driver directly (serial port
  149.    only), and isn't as compatible as using the Communications ToolBox.
  150.  
  151. Q: How do I use sprites?
  152. A: Sprite are little icons that can be moved around in the graphics
  153.    window.  You can use up to 15 sprites, numbered from 1 to 15  Sprites
  154.    will appear in front of any graphics or picts in the graphics window.
  155.    The sprites are in layers; sprite 1 will pass in front of sprite 2
  156.    when they overlap, etc. 
  157.    
  158.    You specify what you want a particular sprite to look like by using
  159.    a resource ID.  For instance a sprite with a resource id of 28 looks
  160.    like the Chipmunk icon, with a resource id of 130 looks like a ball.
  161.    A sprite with with a rsrc id of 0 is invisible.
  162.    
  163.    You may place sprites at an x,y coordinate.  Or you may move them
  164.    around and leave a trail behind them to draw things.  Sprite movement
  165.    commands include { up, down, left, right, forward, turn, turnleft,
  166.    turnright, turnto, penup and pendown }.  To get rid of a sprite,
  167.    simply move them offscreen (e.g. { x,y } = { -1,-1} ).
  168.  
  169. Q: How do I make my own sprites?
  170. A: I use ResEdit (available from ftp.apple.com).  Just paste the new
  171.    sprite 'ICN#' and 'cicn's into the resource fork of a file.  Then
  172.         open "myresfile.rsrc" for data input
  173.    will use the named resource file for sprite (pict & sound) resources.
  174.    Resource ID's 128-160 are reserved for the Chipmunk Basic interpreter,
  175.    so please use a high resource ID number.  A 'cicn' resource requires
  176.    a 'ICN#' resource with the same ID number.  You can use the same
  177.    method for creating custom PICT and sound resources.  You can also
  178.    paste resources directly into your .bas program text file.
  179.    
  180. Q: Why can't I make my graphics window bigger?
  181. A: If you have enough memory in your Mac, try increasing the Preferred
  182.    Memory requirements of Chipmunk Basic using the Finder Get Info dialog.
  183.    Also try decreasing the number of colors in the Monitors Control Panel.
  184.    
  185. Q: How can I change the font or fontsize used for the BIGFONT option?
  186. A:    ' To display the current bigfont preferences:
  187.        print macfunction("getPref", 3), macfunction("getPref", 4)
  188.        ' Example - To set the bigfont preference to Courier 14:
  189.     macfunction("putPref", "Courier", 3)
  190.     macfunction("putPref", "14", 4)
  191.     call "bigfont"
  192.     
  193. Q: Why can't I read the character chr$(13) from a file?
  194. A: The Mac standard c library translates CR characters (0x0D) into LF
  195.    characters (0x0A) when reading or writing text files.  Open a binary
  196.    file for "data input" or "data output" to turn off this translation.
  197.  
  198. Q: Can you send me a list of different peeks and pokes?
  199. A: Peeks and pokes don't have much use on current Mac Systems.  If you
  200.    want to live dangerously, you might want to get a copy of SysEqu.h or
  201.    LoMem.h from an old C or 68K assembly language programming package;
  202.    but don't expect anything you do to be compatible with the latest
  203.    MacOS System software.
  204.  
  205. Q: Is there a compiler for Chipmunk Basic?
  206. A: No, however there are several commercial Basic compilers on the market
  207.    (Staz FutureBasic, True Basic, VIP Basic, Oracle Power Objects ...)
  208.    and rumors of major new support for the BASIC language on the Mac
  209.    coming next year (1997 maybe ?,  Kenobi ??, Denali ??? ... ).
  210.    
  211. Q: Why isn't this cool command that I found documented.
  212. A: Any undocumented command is fair game to change in the next version.
  213.    Use at your own risk: Hey, even some of the documented commands change!
  214.  
  215. Q: (not really a question) The documentation s*cks...  uh, stinks.
  216. A: I'm crazy enough to have found that tinkering with and enhancing
  217.    Chipmunk Basic has been enjoyable use of some spare time.  If you
  218.    are enlightened enough to enjoy writing quality documentation, please
  219.    feel free to contribute your efforts.
  220.  
  221. Q: What is the history of Chipmunk Basic?
  222. A: In March 1990, p2c, a pascal to c translator, was posted to the usenet
  223.    newsgroup "comp.source.misc" by David Gillespie.  One of the test
  224.    input files was "basic.p".  I used the output c file to learn about
  225.    language interpreters; and then ported the resulting Basic interpreter
  226.    to a Mac 512KE and then to a PowerMac 7100.  Chipmunk Basic for
  227.    the PowerMac was posted to Info-Mac on March 15th, 1994, the day
  228.    after the first PowerMacintosh was available for sale to the public.
  229.  
  230. ---
  231. Additional Chipmunk Basic Macintosh specific commands and functions:
  232.  
  233. - Mac Graphics
  234.   * note: all graphics commands in version 3.x are experimental & beta test *
  235.  
  236.         GRAPHICS 0                              :' show graphics window
  237.         graphics -1                            :' hide graphics window
  238.         graphics WINDOW x, y, width, height    :' graphics window setup
  239.                                 :' (x,y) location, width and height
  240.         graphics WINDOW width, height            :' adjust the size
  241.  
  242.         graphics MOVETO  x,y            :' Move pen To x,y
  243.         graphics LINETO  x,y            :' draw Line To x,y
  244.         
  245.         graphics moveto 10,20 : graphics lineto 30,50    :' example
  246.                         :' that draws a line from (10,20) to (30,50)
  247.  
  248.         graphics CIRCLE  x            :' circle of diameter x
  249.                         :' previous MOVETO x,y s ets center location
  250.         graphics OVAL    x,y            :' oval  x wide by y high
  251.  
  252.         graphics RECT  x1,y1, x2,y2            :' FrameRect
  253.         graphics FILLRECT  x1,y1, x2,y2,pat#    :' PaintRect
  254.         graphics FILLRECT  x1,y1, x2,y2,-1    :' EraseRect
  255.         graphics OVAL  x1,y1, x2,y2            :' FrameOval
  256.         graphics FILLOVAL  x1,y1, x2,y2,pat#    :' PaintOval
  257.         graphics PENSETUP  xsize, ysize [, mode, pat# ] :' modes 8-15
  258.                 :' modes - 8 patCopy, 9 patOr, 10 patXor, 11 patBic
  259.                 :' pat# - 1 is black, 4 is 50% dots, 12 is bricks, etc.
  260.  
  261.         graphics COLOR  r,g,b            :' red green blue 0-100%
  262.         graphics COLOR 100,0,0            :' changes new color to red
  263.         graphics COLOR  0,0,0            :' use default black
  264.  
  265.         graphics pset x,y                    :' plot 1 point at x,y
  266.         graphics TRIANGLE x1,y1,x2,y2,x3,y3 {,r,g,b}  :' draw triangle
  267.         graphics PICT   x,y,n            :' draw 'pict' resource# n
  268.  
  269.         graphics DRAWTEXT  a$            :' DrawText
  270.                 :' use MOVETO x,y  to position text lower left corner
  271.         graphics TEXTSETUP f, s, m    :' set up text font, size, mode
  272.         graphics textsetup macfunction("GetFNum","monaco"), 24, 0
  273.                 :' modes : 0 srcCopy, 1 srcOr, 2 srcXor, 3 srcBic
  274.  
  275.         graphics (-38)                :' get graphics window max width
  276.         graphics (-39)                :' get graphics window max height
  277.         graphics (-34)                :' get graphics window pixel depth
  278.  
  279.         SPRITE    n  x, y, id        :' sprite n @ x,y using ICN# id
  280.                                     :' n from 1 to 15, 1 frontmost
  281.                                     :' ICN# 128 - 141 included with app
  282.                                     :' cicn requires ICN# with same id.
  283.         sprite    n  UP    x        :' sprite #n move up x pixels
  284.         sprite  n  DOWN  x        :'   also returns new sprite y coord
  285.         sprite  n  LEFT  x        :' move LEFT (not turn as in Logo!)
  286.         sprite  n  RIGHT   x
  287.         sprite    n  TURN    d        :' turn counter-clockwise d degrees
  288.         sprite    n  TURNRIGHT d        :' turn clockwise d degrees
  289.         sprite    n  TURNLEFT  d
  290.         sprite    n  TURNTO    d        :' turn to d degrees from x axis
  291.         sprite    n  FORWARD x        :' move forward x pixels
  292.         sprite    n  PENUP
  293.         sprite    n  PENDOWN
  294.         sprite    n  COLLISION        :' returns 1st sprite# in contact
  295.         sprite  id  on  x,y        :' paste a fixed sprite image @(x,y)
  296.  
  297.         graphics WINDOW -1,-1, x,y, 2    :' scroll graphics background
  298.  
  299.         ' Too small a "Preferred Size" (as set from Finder Get Info window)
  300.         ' may limit the maximum graphics window size.
  301.  
  302.         call "savepicture", fname$
  303.                         :' saves graphics window to a PICT file
  304.                         :' use graphics window command to set size
  305.         graphics PICT x,y,"filename.PICT"
  306.                         :' draws graphics from PICT file at (x,y)
  307.  
  308.         graphics refreshtime 5    :' approx. 5/60ths second refresh rate
  309.         graphics 0        :' refresh graphics window now
  310.                 :' for control of graphics animation update rate
  311.         
  312. - Mac Sound commands
  313.  
  314.         morse "CQ DE N6YWU",16,40,13,700        :' play morse code
  315.                 :' MORSE string, dot_wpm, volume, letter_wpm, freq
  316.   
  317.         say "hello world"            :'  *requires* the Speech Manager
  318.         say "faster", 196, 44, 1    :'  string, rate, pitch, voice#
  319.         say            :' reads the last 12 lines of the console window
  320.         x  = macfunction("numSpeakers")    :' the number of voices
  321.         v$ = macfunction("getSpeaker")    :' get the voices name
  322.  
  323.         sound 440, 0.5, 30    :' freq, secs_duration, vol(0-100)
  324.         sound 0, 8192            :' play snd resource #8192
  325.         sound -1, a(0),11100    :' play 1 sec. of samples from array a()
  326.         sound -2, midi_voice, midi_key, velocity, secs_dur [,channel]
  327.                 :' play Quicktime midi synth, requires Quicktime 2.0
  328.                 :' can play multivoice sound (chords) by using 4 channels
  329.         sound -3, voice, midi_key, vel, t [,ch] :' append another QT note
  330.     sound n,freq(0),dur,vol(0) :' play n tones from arrays freq & vol
  331.                 :' 1 < n < 9 => up to 8 multivoice tones (chords)
  332.     
  333.         call "record", a(0), n  :' records n samples of sound into a()
  334.  
  335. - Mac User interface functions and commands
  336.         
  337.         cls                    : rem clears console & graphics windows
  338.         gotoxy 5,10 : print "here" : rem move text cursor (0,0 origin)
  339.         x = pos(0)            : rem text cursor horizontal location
  340.         y = pos(-1)            : rem vertical text cursor location
  341.  
  342.         a$ = inputbox("prompt", "title", "default", 0)
  343.                 :' gets string input using default dialog
  344.         a$ = inputbox("prompt", "title", "default", id)
  345.                 :' if id > 1024 this will use a custom DLOG #id
  346.                 :'    with item 1 = OK, item 2 = cancel
  347.                 :'    prompt replaces 1st static text item
  348.                 :'    default replaces 1st edit text item
  349.                 
  350.         call "bigfont"            :' toggles BIGFONT console output status
  351.         call "hideMenuBar"    :' hides menubar. graphics -1 to restore.
  352.         call "wintitle", t$    :' just sets the graphics window title
  353.  
  354.         mouse(0)        ' returns 1 if the mouse button is down
  355.         mouse(1)        ' x coordinate in current window
  356.         mouse(2)        ' y coordinate in current window
  357.         mouse(3)        ' last x click location (set to -1 after read)
  358.         mouse(4)        ' last y click location (set to -1 after read)
  359.                 :' mouse() must follow a graphics command
  360.                 :'   to get a location in the graphics window.
  361.  
  362.         graphics BUTTON title$,x,y,w,h,key_code
  363.                         :' draw a standard button at (x,y) size (w,h)
  364.                         :' will input chr$(key_code) when pressed
  365.         graphics BUTTON title$,x,y,w,h,e$
  366.                         :' button will exec(e$) when pressed
  367.         graphics BUTTON "",x,y,w,h,e$    :' transparent button
  368.         graphics BUTTON "",x,y,id,e$,-4    :' cicn or ICN# id button
  369.         graphics BUTTON "",-1            :' remove all buttons & sliders
  370.  
  371.         menu 4, title$, itemlist$, eventlist$             :' setup menu
  372.         menu 4, "myMenu", "item1;item2", "foo1();foo2()" :' example
  373.                 :' sets up the 4th menu (only 4th menu is implemented.)
  374.                 :' calls your subroutines foo1() & foo2() on menu select.
  375.                 :' subroutines must be previously defined.
  376.                 :' see Apple documentation for menu options
  377.         menu 4, ""        :' removes your menu
  378.         doevents()        :' poll for button and menu events
  379.  
  380. - Additional Mac specific functions and commands:
  381.  
  382.         open "SFGetFile" for input as #2    :' dialog prompt for filename
  383.         open "SFPutFile" for output as #5    :' uses dialog box for name
  384.         open "COM1:" for input as #1        :'  uses CTB Serial Tool
  385.         open "COM3: 9600" for input as #3   :'  uses serial driver
  386.                         :' ** The above file names are case sensitive! **
  387.         open f$ for data input as #4    :' data file, no CR-LF translation
  388.         open f$ for data input  :' use file for snd & pict, etc. resources
  389.         a$ = field$("aa bb cc", 2," ")    :' returns "bb", (awk fields)
  390.  
  391.         call "NoLineNums",1    :' turns off line numbers in list & save
  392.         call "wait", n                    :' waits for n seconds
  393.         call "printText"  :' sends last ~66 console lines to printer
  394.  
  395.         call "putPref","512",7    :' increase scrollback buffer to 512
  396.                 :' you will need to increase the preferred memory size
  397.                 :' by 1K for every +10 lines above 256
  398.         call "sendbreak",t  :' serial port break for t ticks (open 1st)
  399.         call varptr(a%(0))    :' calls 68k code located in array a%
  400.                                 :' 68k code works even on PPC
  401.         call -151        :' drops into MacsBug (must be installed !!!)
  402.         call "beep", i  :' calls BCMD resource "beep" with 1 *long param
  403.         reply$ = macfunction("Gestalt","cput")  :' system gestalt info
  404.         x = macfunction("keydown", 0x3a)         :' test option key
  405.         s$ = macfunction("getclipstr")            :' get clipboard text
  406.         call "putstr2clip", s$            :' put clip if in foreground
  407.  
  408.         vref = macfunction("lastVRefNum")
  409.         par  = macfunction("lastParID")
  410.                 :' gets vRefNum & ParID of the last SFGetFile
  411.                 :' or the current dropped program (System 7 only)
  412.         vref = macfunction("prefVRefNum")
  413.         par  = macfunction("prefParID")    :' preferences folder
  414.         files vref, par                    :' sets the default dir
  415.         files dirname$, dummy$            :' also sets default dir
  416.  
  417.         call "launch", appname$         :' launch an app in local dir
  418.         call "setfiletype", fname$, "TEXT"        :' set file type
  419.         call "setfiletype", fname$, "TEXT","MSWD" :' set type & creator
  420.         
  421.         bsave "filename", ptr, len        :' binary memory save
  422.         i = bload("filename", ptr, len)    :' binary file load to mem
  423.             :' dim tmp%(100) : ptr = varptr(tmp%(0)) : len = 200
  424.  
  425.         macfunction("rsrcload",fname$, rtype$, id, i%(0), sizelim, 2)
  426.             :' loads rsrc data into an integer array & returns size
  427.         macfunction("rsrcsave",filename$, restype$, res_id, i%(0), size)
  428.             :' saves the contents of an integer array as a resource
  429.  
  430.     graphics window 200,200,32,32 : ... : call "copyPict" :
  431.       macfunction("rsrcsave", filename$, "PICT", rsrc_num)
  432.         :' saves contents of a small window as a PICT resource
  433.  
  434.         fre    :' returns available heap memory.
  435.                 :' If this gets much below 32K, one should increase the
  436.                 :'   Preferred size using Finder Get Info & restart Basic.
  437.  
  438. - Sending AppleScripts and AppleEvents
  439.  
  440.         call "doscript", appname$, script$    :' send a DoScript AE
  441.         macfunction("doscript", app$, script$)    :' gets result from AE
  442.         call "doscript", app_sig$, text$, ae_class$, ae_id$
  443.                         :' sends appleEvent with text$ as directObject
  444.         call "doscript","MOSS", url$, "GURL", "GURL"
  445.                         :' sends a get URL event to Netscape(tm)
  446.  
  447.         call "applescript", script$  :' compiles and executes a script.
  448.                         :' script$ can be a single string or a lengthy
  449.                         :' (blank terminated) string array.
  450.                         :' ** requires AppleScript extension **
  451.  
  452. - A few oddball commands included in version 3.4.x just for fun:
  453.  
  454.         call "fft_polar", real(0), amp(0), phase(0) , size :' fft
  455.         call "fft_inv",   amp(0), phase(0), real(0) , size :' inverse
  456.                                 :' the fft size must a power of 2 : 2^n
  457.         call "math$", "mul$", r$, "1234567890", "9876543210"
  458.             :' 200+ digit string math (add$, sub$, mul$, div$, mod$)
  459.  
  460. - AppleScript scripting.  Try this script from a script editor:
  461.         tell application "chipmunk-basic" to DoScript "eval ( 5 * 7 )"
  462.         tell application "chipmunk-basic" to DoScript "eval date$"
  463.             :' eval will return a string result to the script editor.
  464.         tell application "chipmunk-basic" to DoScript "print 22 * 7"
  465.         tell application "chipmunk-basic" to DoScript "say 'hello'"
  466.             :' Tells Chipmunk Basic to executes a statement.
  467.         tell application "chipmunk-basic" to DoScript ("runStatus")
  468.         :' returns whether a Basic program is running
  469. - A few experimental commands that only work in the PPC Mac version:
  470.         ipaddr = macfunction("dnr2num", domain_name$)
  471.         macfucntion ( "fetchHTTP", url$, "", filename$ )
  472.             :' MacTCP HTTP file transfer, saves to local file
  473.             :' example: url$ = "http://www.nicholson.com/rhn/basic.html"
  474.             :' returns file length
  475.             :' requires Open Transport 1.1.1 or newer
  476.  
  477. - ICN#, cicn, PICT & BCMD resources may be stored the resource fork of
  478.         any file, not just the "mumble.bas" program file.  Use:
  479.         open "foo.rsrc" for data input : rem with no "as" token,
  480.            :' this makes the file "foo.rsrc" the current resource file
  481.  
  482. - bigfont options are stored in the Prefs file (edit w/ BBEdit or equiv.)
  483. - maximum graphics window size is also stored in the Prefs file.
  484.         if memory is limited the max size is automatically decreased.
  485.  
  486. ---
  487. Editing extensions:
  488.  
  489. - For users of the text editor BBEdit Lite 3.5, I've included an BBEdit
  490.   extension.  Drop it into the BBEdit Extensions folder.  You can now edit
  491.   your program using BBEdit, and, with a BBEit menu selection, send it to
  492.   Chipmunk Basic to be load and run. (Other versions of BBEdit also work.)
  493.   
  494.   Bug:  The program text must be longer than 32 characters for the
  495.   BBEdit "run contents" command to work.
  496.  
  497. ---
  498. Other notes or Bugs:
  499.  
  500.   3.5.4:  safesave feature can be reenabled by setting
  501.         STR# resource 140, item 1 to "safesave" (use ResEdit).
  502.  
  503. - Programs without line numbers can be loaded from a file; however
  504.     sequential line numbers will be added.  The target of a GOTO can
  505.     be a label followed by a colon. e.g.
  506.         foo: print x : x=x-1 : if x>0 then goto foo:
  507. - To save to file without line numbers, try:
  508.     save filename$,"NLN"        : rem - Don't use "goto <number>".
  509. - Other reserved words (don't use these!) :
  510.         msgbox  do loop until break  function
  511.         method private public local   dialog memstat()
  512.         draw play   min max  filename$
  513.         each redim resume  static  option degrees radians
  514.         eqv imp key is each set width swap
  515. - For the old high precedence NOT operator, enter: #cbas#non_ansi_not
  516.  
  517. - All input works like the LINE INPUT statement of other Basic versions.
  518. - Line numbers above 999999999 will not list.
  519.  
  520. ---
  521. Important Chipmunk Basic Language changes:
  522.   3.3.7:  type & class vars now require "dim ... as new ..." syntax.
  523.   3.4.7:  lowered NOT operator precedence to match ANSI standard.
  524.           ON-GOTO no longer checks bounds.
  525.           
  526. Recent Bug fixes:
  527.   3.3.2: fixed sprite turn direction bug
  528.   3.3.5: fixed integer rounding
  529.   3.3.7: fixed assignment to variable "this" in object methods fixed
  530.   3.4.0: fixed default voice in say, input eof bug, pref file bug
  531.   3.4.2: fixed hex$() of negative numbers
  532.   3.4.4: fixed public private default
  533.   3.4.5: fixed moveto & button clear
  534.   3.4.7: fixed fixed nesting of if-then-else
  535.   3.4.8: fixed nesting of select-case
  536.   3.5.1: fixed BBEdit Extension junk after end of program load.
  537.          fixed some print using bugs, increased input line to 254 chars.
  538.   3.5.2: added backup on save, fixed 68K stdio EOLN.
  539.   3.5.3: fixed SFPutFile filename return, added for/next integer index's
  540.        added bload & bsave
  541.   3.5.4: fixed while/wend exit bug, fixed ubound/isarray docs,
  542.        added unsaved/load warnings, removed safesave, added ppc tcp
  543.   3.5.5: fixed OTLib link bug  
  544.   
  545. Please send bug reports to  rhn@nicholson.com
  546.  
  547. ---
  548. Thanks to:
  549.  - Dave Gillespie for writing the original Pascal version of this Basic;
  550.  - Dave Betz for ideas from the original XLisp 1.6 Mac console;
  551.  - many folks from Apple DTS, Metrowerks, the c.s.m.p newsgroup, etc.;
  552.  - John Norstad for making available the Newswatcher TCP source code;
  553.  - Quinn "The Eskimo!" at Apple for the Open Transport examples;
  554.  - Jim Stout for making available "Jim's CDEFs" with source code;
  555.  - Rich Seigal for making BBEdit Lite extendable;
  556.  - Thomas Ferrell for contributing a tutorial for the web page;
  557.  - & the many people who who have sent me polite detailed bug reports.
  558.  
  559. ---
  560. A  sample program:
  561.  
  562. --- cut here ---
  563. 1 rem "sieve.bas" , a prime number sieve benchmark
  564. 2 t = timer
  565. 3 dim f(8194)
  566. 4 for i = 0 to 8191 : f(i) = 1 : next i
  567. 5 s = 8191
  568. 6 for i = 0 to s
  569. 7   if f(i) = 0 then goto 11
  570. 8   p = i+i+3
  571. 9   for k = i+p to s step p : f(k) = 0 : next k
  572. 10   c = c+1
  573. 11 next i
  574. 12 print c;" primes found in ";
  575. 13 t = timer-t
  576. 14 print t;" seconds"
  577. 15 end
  578. --- cut here ---
  579. */
  580.